<?php

require_once $_SERVER['roottrivialchase'].'/classes/Partie.class.php';
require_once $_SERVER['roottrivialchase'].'/classes/Utilisateur.class.php';
require_once $_SERVER['roottrivialchase'].$_SERVER['Cmix_bdd'].'/CMIX_bdd.php';
require_once $_SERVER['roottrivialchase'].$_SERVER['TrivialChase_bdd'].'/TrivialChase_bdd.php';

 
class PartieTest extends PHPUnit_Framework_TestCase {
	
	public static function setUpBeforeClass()
	{
		CMIX_bdd::create();
		CreateBD::create();
    }
	
	public function setUp()
	{
		$BDD_tc=ConnectToBD_tc::connexion();
		$BDD_cmix=ConnectToBD_cmix::connexion();

		/**********************************Utilisateur*****************************************/
		$mdp=sha1('aaa');
		$lt=array();
		$lt=serialize($lt);
		$requete="INSERT INTO utilisateur (`id_joueur` ,`nom` ,`prenom` ,`mail` ,`login` ,`mot_de_passe` ,`sexe` ,`naissance` ,`langue` ,`list_table`)
		VALUES 
		('1', 'Martin', 'Arthur', 'martin.arthur@gmail.com', 'arthour', '$mdp', 'homme', '1968-10-02', 'fr', '$lt'),
		('2', 'Cook', 'Thomas', 'thomas.cook@gmail.com', 'cookduc', '$mdp', 'homme', '1970-08-12', 'fr', '$lt'),
		('3', 'Rigon', 'Bastien', 'rigon.bastien@gmail.com', 'andros', '$mdp', 'homme', '1989-10-17', 'fr', '$lt'),
		('4', 'Bones', 'Caroline', 'caroline.bones@gmail.com', 'caro', '$mdp', 'femme', '1968-10-02', 'fr', '$lt'),
		('5', 'Scott', 'Charlotte', 'charlotte.scott@gmail.com', 'chacha', '$mdp', 'femme', '1968-10-02', 'fr',  '$lt');";
		
		$reqprep=$BDD_cmix->prepare($requete);
		$reqprep->execute();
		
		//position de chacha
		Utilisateur::rentrer_table(5,1,"assi");
		Utilisateur::rentrer_table(5,3,"assi");
		Utilisateur::rentrer_table(5,5,"assi");
		Utilisateur::rentrer_table(5,4,"spec");
		//position de caro
		Utilisateur::rentrer_table(4,3,"assi");
		Utilisateur::rentrer_table(4,4,"assi");
		//position de arthour
		Utilisateur::rentrer_table(1,5,"spec");
		//position de cookduc
		Utilisateur::rentrer_table(2,3,"spec");
		Utilisateur::rentrer_table(2,5,"spec");
		Utilisateur::rentrer_table(2,4,"assi");
		//position de andros
		/******************************Salle****************************************/
		//1
		$requete="INSERT INTO salle (`id_salle` ,`nom_salle` ,`nb_joueur` ,`id_serveur`)VALUES 
		('1', 'orange', '2', '1'), 
		('2', 'fraise', '5', '1'),
		('3', 'diamant', '0', '2'),
		('4', 'topaze', '0', '2')";
		$reqprep=$BDD_tc->prepare($requete);
		$reqprep->execute();
		/****************************Salle_joueur**********************************/
		$lj=array(4=>'caro',5=>'chacha');
		$lj=serialize($lj);
		$lj2=array(1=>'arthour',2=>'cookduc',3=>'andros',4=>'caro',5=>'chacha');
		$lj2=serialize($lj2);
		$requete="INSERT INTO salle_joueur (`id_salle` ,`list_joueur`)VALUES 
		(1, '$lj'),
		(2, '$lj2');";
		$reqprep=$BDD_tc->prepare($requete);
		$reqprep->execute();
		
		
		
		/*************************Table_jeu******************************************/
		$lj=array(4=>'caro',5=>'chacha');
		$lj=serialize($lj);
		$ls=array();
		$ls=serialize($ls);
		$lj2=array(4=>'caro');
		$lj2=serialize($lj2);
		$ls2=array();
		$ls2=serialize($ls2);
		$lj3=array(4=>'caro',5=>'chacha',1=>'arthour');
		$lj3=serialize($lj3);
		$ls3=array(2=>'cookduc');
		$ls3=serialize($ls3);
		$lj4=array(4=>'caro',2=>'cookduc',3=>'andros');
		$lj4=serialize($lj4);
		$ls4=array(5=>'chacha');
		$ls4=serialize($ls4);
		$lj5=array(4=>'caro',5=>'chacha');
		$lj5=serialize($lj5);
		$ls5=array(1=>'arthour',2=>'cookduc');
		$ls5=serialize($ls5);
		$requete="INSERT INTO `bdd_trivialchase`.`table_jeu` (`id_table` ,`nom_table` ,`id_serveur` ,`id_salle` ,`nb_joueur` ,`nb_spectateur` ,`partie_lance` ,`partie_pause` ,`niveau` ,`list_spectateur` ,`list_joueur` ,`id_createur`)
		VALUES 
		('1', 'acide', '1', '1', '2', '0', '0', '0', 'moyen', '$ls', '$lj', '4'),
		('2', 'sucree', '1', '1', '1', '0', '0', '0', 'facile', '$ls2', '$lj2', '4'),
		('3', 'rouge', '1', '2', '3', '1', '0', '0', 'facile', '$ls3', '$lj3', '1'),
		('4', 'verte', '1', '2', '3', '1', '0', '0', 'facile', '$ls4', '$lj4', '3'),
		('5', 'blanche', '1', '2', '2', '2', '0', '0', 'facile', '$ls5', '$lj5',  '4');";
		
		$reqprep=$BDD_tc->prepare($requete);
		$reqprep->execute();
		
		
	}
	/*************************************************************************************/
	/**
	* Indique que la partie a commencer. On teste que le champs a changer de valeur
	* cas d'utilisation : La table n'a pas commence sa partie. On change l'etat de la partie de la table 1
	* attendu =1
	* rapport = OK
	**/
	public function test_commencer_partie()
	{
		$attendu=1;
		$BDD_tc=ConnectToBD_tc::connexion();

		Partie::commencer_partie(1);
		$requete="SELECT partie_lance FROM table_jeu  WHERE id_table = '1'";
		$reqprep=$BDD_tc->prepare($requete);
		$reqprep->execute();
		
		$reqprep->bindColumn('partie_lance',$resultat);
		$reqprep->fetch();
		
		$this->assertEquals($resultat,$attendu);
	}
	
	/**
	* Indique que la partie est en pause. On teste que le champs a changer de valeur
	* cas d'utilisation : La table etait en jeu. On change l'etat de la partie de la table 1
	* attendu =1
	* rapport = OK
	**/
	public function test_pause_partie()
	{
		$attendu=1;
		$BDD_tc=ConnectToBD_tc::connexion();
		Partie::mettre_en_pause(1);
		$requete="SELECT partie_pause FROM table_jeu  WHERE id_table = '1'";
		$reqprep=$BDD_tc->prepare($requete);
		$reqprep->execute();
		
		$reqprep->bindColumn('partie_pause',$resultat);
		$reqprep->fetch();
		
		$this->assertEquals($resultat,$attendu);
	}
	
	/**
	* Indique que la partie n'est plus en pause. On teste que le champs a changer de valeur
	* cas d'utilisation : La table etait en pause. On change l'etat de la partie de la table 1
	* attendu =0
	* rapport = OK
	**/
	public function test_relancer_partie()
	{
		$attendu=0;
		$BDD_tc=ConnectToBD_tc::connexion();
		Partie::relancer(1);
		$requete="SELECT partie_pause FROM table_jeu  WHERE id_table = '1'";
		$reqprep=$BDD_tc->prepare($requete);
		$reqprep->execute();
		
		$reqprep->bindColumn('partie_pause',$resultat);
		$reqprep->fetch();
		
		$this->assertEquals($resultat,$attendu);
	}
	
	/**
	* Termine une partie. teste que la partie a ete supprimee de la table
	* cas d'utilisation : La table existe. On termine la partie de la table 1
	* attendu : 0
	* rapport: OK
	**/
	public function test_terminer_partie()
	{
		$attendu=0;
		Partie::terminer_partie(1);
		$BDD_tc=ConnectToBD_tc::connexion();
		$requete="SELECT id_table FROM table_jeu  WHERE id_table = '1'";
		$reqprep=$BDD_tc->prepare($requete);
		$reqprep->execute();
		$resultat=$reqprep->rowCount();
		$this->assertEquals($resultat,$attendu);
	}
	
	/**
	* Termine une partie. teste que les utilisateurs qui etaient sur la table ont mis a jour leur list_table
	* cas d'utilisation : La table existe. Il y a des joueurs et des spectateurs. On termine la partie de la table 4
	* attendu : 0
	* rapport: OK
	**/
	public function test_terminer_partie_2()
	{
		$attendu=0;
		$BDD_tc=ConnectToBD_tc::connexion();
		$requete="SELECT list_joueur,list_spectateur FROM table_jeu  WHERE id_table = '4'";
		$reqprep=$BDD_tc->prepare($requete);
		$reqprep->execute();
		$reqprep->bindColumn('list_joueur',$list_joueur);
		$reqprep->bindColumn('list_spectateur',$list_spectateur);
		$reqprep->fetch();
		$list_joueur=unserialize($list_joueur);
		$list_spectateur=unserialize($list_spectateur);
		Partie::terminer_partie(1);
		
		$resultat=0;
		$BDD_cmix=ConnectToBD_cmix::connexion();
		foreach($list_joueur as $key=>$value)
		{
			$requete="SELECT list_table FROM utilisateur  WHERE id_joueur = '$key'";
			$reqprep=$BDD_cmix->prepare($requete);
			$reqprep->execute();
			$reqprep->bindColumn('list_table',$list_table);
			$list_table=unserialize($list_table);
			if(isset($list_table[4])) $resultat=1;
		}
		foreach($list_spectateur as $key=>$value)
		{
			$requete="SELECT list_table FROM utilisateur  WHERE id_joueur = '$key'";
			$reqprep=$BDD_cmix->prepare($requete);
			$reqprep->execute();
			$reqprep->bindColumn('list_table',$list_table);
			$list_table=unserialize($list_table);
			if(isset($list_table[4])) $resultat=1;
		}
		
		$this->assertEquals($resultat,$attendu);
	}
	/*************************************************************************************/
		public function tearDown()
	{
		CMIX_bdd::vider_toutes_tables();
		CreateBD::vider_toutes_tables();
		
	}
	
	public static function tearDownAfterClass()
    {
		CMIX_bdd::supprimer_base();
		CreateBD::supprimer_base();
    }
}